#include<stdio.h>
#include<sys/un.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<unistd.h>
#include<ctype.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<string.h>
//进程间通信实现：本地套接字domain
int main(void)
{
    int sockld;
    int cld;
    char buf[1024];
    sockld=socket(AF_UNIX,SOCK_STREAM,0);
    struct sockaddr_un serv_addr,clit_addr;

    memset(&serv_addr,0,sizeof(serv_addr));

    serv_addr.sun_family=AF_UNIX;
    strcpy(serv_addr.sun_path,"serv.socket");
//    int len=offsetof(struct sockaddr_un,sun_path)+strlen(serv_addr.sun_path);
     int len=2+strlen(serv_addr.sun_path);
    bind(sockld,&serv_addr,len);//bind 成功后，会在本地生成一个serv.socket的套接字
    listen(sockld,20);

    printf("service is runing!\n");

    len=sizeof(struct sockaddr);
    while(1)
    {

        cld=accept(sockld,(struct sockaddr*)&clit_addr,(socklen_t*)&len);
       // len-=offsetof(struct sockaddr_un,sun_path);
       len-=2;
        clit_addr.sun_path[len]='\0';
        printf("clinet bind filename is %s\n",clit_addr.sun_path);
        int size;
        while((size=read(cld,buf,sizeof(buf)))>0)
        {
            for(int i=0;i<size;i++)
            {

                buf[i]=toupper(buf[i]);

            }
            write(cld,buf,size);
        }
    }


    return 0;
}
